package domain;

import java.awt.Point;

public class Auto extends Thread implements ObjetoEnTablero {
	private Integer id;
	private Direccion direccion;
	private boolean estaChocado;
	private Point posicion;
	private Pista pista;
	private Team team;
	
	public Auto(int id, Team team, Point poss){
		this.id = id;
		this.team = team;
		this.estaChocado = false;
		this.posicion = poss;
		this.direccion = new Norte();
	}	
	
	public Auto(int id, Team team) {
		this.id = id;
		this.team = team;
		this.estaChocado = false;
		this.direccion = new Norte();
		this.posicion = new Point();
	}

	public void mover(){ 
		this.team.mover(this);
	}
	public void setPosicion (Point p){
		this.posicion.move(p.x, p.y);
	}
	synchronized public void cambiarDireccion (Direccion dir){
		this.direccion = dir;
	}
	synchronized public Direccion getDireccion(){
		return this.direccion;
	}
	public Point getPosicion(){
		return this.posicion;
	}
	public void run(){
		while(!team.hayGanador()){ 
			this.mover();
		}
	}
	public Team getTeam(){
		return this.team;
	}


	synchronized public void hacerMovimiento(Auto chocador, Tablero tablero) {
		//reboto si es que puedo
		Point nextPossChocado = chocador.getDireccion().getNext(this.getPosicion());
		tablero.getCuadrado(nextPossChocado).autoEmpujado(this, chocador.getDireccion(), tablero);
		
		//hacer rebotar al que me choco
		Point prevPossChocador = chocador.getDireccion().nextOpuesta(chocador.getPosicion());
		if (!tablero.fueraDeTablero(prevPossChocador)){
			tablero.getCuadrado(prevPossChocador).autoEmpujado(chocador,chocador.getDireccion().getOpuesta(), tablero);
		}
	
		chocarse();
	}

	private void chocarse() {
		this.estaChocado = true;
	}
	public void arreglar(){
		this.estaChocado = false;
	}

	public void autoEmpujado(Auto auto,Direccion dir, Tablero tab) {
		// dejo al auto empujado donde esta
	}

	synchronized public boolean chocado() { //si lo estan chocando espero que termine
		return estaChocado;
	}
	
	public Point nextPoss(){
		return this.direccion.getNext(posicion);
	}
	public int getNumero(){
		return this.id;
	}
	public String getInformacion() {
		return "["+ this.getTeam().getNumero()+ ":" + this.getNumero() + this.getDireccion().dir()+"]";
	}
}
